import cv2
import matplotlib.pyplot as plt

# 读取图像
img = cv2.imread("44.PNG", 0)  # 0表示以灰度模式读取图像

# 显示原始图像和直方图
plt.subplot(2, 2, 1)  # 2行2列的第1个位置
plt.imshow(img, 'gray')
plt.title("img")
plt.xticks([])  # 隐藏x轴刻度
plt.yticks([])  # 隐藏y轴刻度

plt.subplot(2, 2, 2)  # 2行2列的第2个位置
plt.hist(img.ravel(), 256, [0, 256])
plt.title("hist")
plt.xticks([])  # 隐藏x轴刻度
plt.yticks([])  # 隐藏y轴刻度

# 直方图均衡化
img_equal = cv2.equalizeHist(img)  # 直方图均衡化函数

# 显示均衡化后的图像和直方图
plt.subplot(2, 2, 3)  # 2行2列的第3个位置
plt.imshow(img_equal, 'gray')
plt.title("img_equal")
plt.xticks([])  # 隐藏x轴刻度
plt.yticks([])  # 隐藏y轴刻度

plt.subplot(2, 2, 4)  # 2行2列的第4个位置
plt.hist(img_equal.ravel(), 256, [0, 256])
plt.title("img_equal_hist")
plt.xticks([])  # 隐藏x轴刻度
plt.yticks([])  # 隐藏y轴刻度

# 显示所有图像
plt.show()



# #修改后
# import cv2
# import matplotlib.pyplot as plt
#
# # 读取图像（灰度模式）
# img = cv2.imread("44.PNG", 0)
#
# # 定义不同的直方图参数组合
# params = [
#     {"bins": 256, "range": [0, 256]},  # 默认参数
#     {"bins": 128, "range": [0, 256]},  # 减少 bins 数量
#     {"bins": 256, "range": [50, 200]},  # 缩小像素范围
#     {"bins": 64, "range": [0, 200]}  # 同时减少 bins 和缩小范围
# ]
#
# plt.figure(figsize=(12, 12))
#
# # 遍历不同参数组合
# for i, param in enumerate(params):
#     # 显示原图
#     plt.subplot(4, 2, 2 * i + 1)
#     plt.imshow(img, 'gray')
#     plt.title(f"Original (param {i + 1})")
#     plt.axis('off')
#
#     # 显示对应参数的直方图
#     plt.subplot(4, 2, 2 * i + 2)
#     plt.hist(img.ravel(), **param, color='blue', alpha=0.7)
#     plt.title(f"Bins={param['bins']}, Range={param['range']}")
#     plt.xlabel("Pixel Intensity")
#     plt.ylabel("Frequency")
#
# plt.tight_layout()
# plt.show()